<?php
/**
* Fichier de la Classe de traitements des requetes http. Gère l'url rewriting.
* 
* PHP version 5.1.6
*
* @package   Smartbok
* @author    Christophe Hebet <christophe.hebet@dgfip.finances.gouv.fr> 
* @copyright 2013 - DGFiP
*/

class SmartbokRequete
{
    public $controller = null;
    public $action = null;
    public $params = array();
    private $_appVars;
    
    public function __construct($appVars) {
        $this->_appVars = $appVars;
        $this->analyserRequete($appVars['urlRewriting']);
    }
    
    /**
     * Fonction d'analyse et de traitement des requetes http.
     * 
     * La fonction traitera la requete http qu'elle soit réécrite ou pas en fonction du paramètre passé.
     * on admet que les requetes contenant des paramètres (récrite ou pas) commence toujorus par définir le nom du 
     * module et donc du controller associé. Le second paramètre est analyse comme étant l'action du controller qui 
     * sera exécutée. Tout ce qui vient après est considéré comme des paramètres fonctionnels
     * Le nom du controller est stocké dans l'attribut controller. 
     * L'action est stocké dans l'attribut action.
     * Les arguments sont stockés dans l'attribut params.
     * Si la requete n'est pas réécrite, les params sont sous la forme d'un tableau associatif indicé sur le nom 
     * passédans l'url. Sinon, ils sont stocké dans l'ordre dans lequel ils sont trouvés.   
     *   
     * @param boolean $rewrite
     * @return multitype:|unknown
     */
    public function analyserRequete($rewrite) {
        if ($rewrite === true) {            
            if (isset($_SERVER['REQUEST_URI']) === true) {
                $url = $_SERVER['REQUEST_URI'];
            }
            else {
                $url = '';
            }
            $requestUri = substr($url, strlen(dirname($_SERVER['SCRIPT_NAME'])));
            if ($requestUri === '/') {
                $requestUri = '';
            }
            if (empty($requestUri) === true || $requestUri === 'index.php') {
                return array();
            }
            
            if(strpos($requestUri, '/') == 0) {
            	$requestUri = substr($requestUri, 1);
            }
            $args = explode('/', $requestUri);
            $this->controller = $args[0];
            $this->action = $args[1];
            $this->params = array_slice($args, 2);
        }
        else {
            parse_str($_SERVER['QUERY_STRING'], $args);
            $this->params = array_slice($args, 2);
            $this->controller = current($args);
            $this->action = next($args);           
        }
    }
    
    /**
     * Méthode de récupération des paramètres de la requete. 
     * Les paramètres sont nettoyés avant d'etre retournés.
     * @param string $param
     * @return multitype
     */
    public function getParam($param) {
        if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST[$param]) === true) {
            $param = $this->nettoyerParam($_POST[$param]);
        }
        else{
            $param = $this->nettoyerParam($_GET[$param]);
        }
        return $param;
    }
    
    /**
     * fonction de nettoyage des paramètre de la requête
     * a implémenter avec les options de sécurités 
     * @param string $arg
     * @return multitype
     */
    private function nettoyerParam($arg) {
        return $arg;
    }
    
    public function getAppVars() {
        return $this->_appVars;
    }
}